package com.me.study.importSelector;

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.annotation.AnnotationAttributes;
import org.springframework.core.type.AnnotationMetadata;

/**
 * spring ImportSelector： 返回 需要注册的组件 的全限定类名数组。<p>
 * 配置 {@link org.springframework.context.annotation.Import @Import} 选择器，选择导入什么样的 class。<p>
 * 比如此处：根据是否配置 @EnableSelector(value = true) 动态决定是否是否导入 ProductDaoImpl。<p></p>
 *
 * @author ME
 * @date   2020/1/2
 */
public class TestImportSelector implements ImportSelector {

    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
		AnnotationAttributes annotationAttributes = AnnotationAttributes
				.fromMap(importingClassMetadata.getAnnotationAttributes(EnableSelector.class.getName()));
		boolean value = annotationAttributes.getBoolean("isEnable");
		if (value) {
			System.out.println("【Spring】 ImportSelector: 根据接口说明，此处其实应该导入一个 `@Configuration`类。\n" +
					"实际使用 TestImportSelector 声明了一个 Bean [ProductDaoImpl]");
			return new String[] { ProductDaoImpl.class.getName() };
		} else {
			return new String[0];
		}
    }
}
